﻿#region librerias que necesito
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
#region librerias que yo añado
using Librerias;
//para enviar correoUsuario
using System.Net;
using System.Net.Mail;
using System.IO;
#endregion
#endregion

namespace eCampus
{
    /// <summary>
    /// Formulario que se mostrará si no sé o no puedo acceder al sistema
    /// </summary>
    public partial class FormNoPuedoAccesoAlSistema : Form
    {
        #region constructores
        public FormNoPuedoAccesoAlSistema()
        {
            InitializeComponent();
        }
        #endregion

        #region control de errores introducción de datos del usuario2 FormNoPuedoAccesoAlSistema
        private bool comprobarCampos()
        {
            EP.SetError(tbQuienSoy, "");
            EP.SetError(tbInfoPedida, "");
            
            //en ppio estás todo bien
            bool ret = true;

            if (tbQuienSoy.Text == "")
            {
                EP.SetError(tbQuienSoy, "No puede dejar este campo vacío");
                ret = false;
            }
            if (tbInfoPedida.Text == "")
            {
                EP.SetError(tbInfoPedida, "No puede dejar este campo vacío");
                ret = false;
            }

            return ret;
        }
        #endregion

        #region Para salir del formulario
        /// <summary>
        /// Para salir del formulario
        /// </summary>
        /// <param name="sender">btCancelar</param>
        /// <param name="e">click</param>
        private void btCancelar_Click(object sender, EventArgs e)
        {
            this.Dispose();
        }
        #endregion

        #region Si olvido clave
        /// <summary>
        /// Si olvido clave
        /// </summary>
        /// <param name="sender">rbOlvidoClave</param>
        /// <param name="e">click</param>
        private void rbOlvidoClave_Click(object sender, EventArgs e)
        {
            tbInfoPedida.Text = "";
            tbQuienSoy.Text = "";
            this.Size = new Size(352, 400);
            btContinuar.Location = new Point(166, 340);
            btCancelar.Location = new Point(247, 340);
            this.CenterToScreen();
            gbPuesEntonces.Visible = true;
            lbQuienSoy.Text = "Tu dirección de usuario:";
            lbInfoPedida.Text = "Tu dirección de correo-e alternativo:";
            lbEntonces.Text = "y se te enviará recordatorio.";
            btContinuar.Visible = true;
        }
        #endregion

        #region Si olvido el usuario-doc
        /// <summary>
        /// Si olvido el usuario
        /// </summary>
        /// <param name="sender">rbOlvidoNombreUsuario</param>
        /// <param name="e">click</param>
        private void rbOlvidoNombreUsuario_Click(object sender, EventArgs e)
        {
            tbInfoPedida.Text = "";
            tbQuienSoy.Text = "";
            this.Size = new Size(352, 400);
            btContinuar.Location = new Point(166, 340);
            btCancelar.Location = new Point(247, 340);
            this.CenterToScreen();
            gbPuesEntonces.Visible = true;
            lbQuienSoy.Text="Tu dirección de correo-e alternativo:";
            lbInfoPedida.Text = "Tu teléfono de móvil:";
            lbEntonces.Text = "y se te enviará sms con recordatorio";
            btContinuar.Visible = true;
        }
        #endregion

        #region Usabilidad formulario-doc
        /// <summary>
        /// Usabilidad formulario
        /// </summary>
        /// <param name="sender">rbOlvidoClave</param>
        /// <param name="e">Enter</param>
        private void rbOlvidoClave_Enter(object sender, EventArgs e)
        {
            rbOlvidoClave.BackColor = Color.Gold;
        }
        private void FormNoPuedoAccesoAlSistema_Shown(object sender, EventArgs e)
        {
            btCancelar.Focus();
        }
        private void rbOlvidoClave_Leave(object sender, EventArgs e)
        {
            rbOlvidoClave.BackColor = Color.Transparent;
        }

        private void rbOlvidoNombreUsuario_Enter(object sender, EventArgs e)
        {
            rbOlvidoNombreUsuario.BackColor = Color.Gold;
        }

        private void rbOlvidoNombreUsuario_Leave(object sender, EventArgs e)
        {
            rbOlvidoNombreUsuario.BackColor = Color.Transparent;
        }

        private void tbQuienSoy_Enter(object sender, EventArgs e)
        {
            tbQuienSoy.BackColor = Color.Gold;
        }

        private void tbQuienSoy_Leave(object sender, EventArgs e)
        {
            tbQuienSoy.BackColor = Color.White;
        }

        private void tbInfoPedida_Enter(object sender, EventArgs e)
        {
            tbInfoPedida.BackColor = Color.Gold;
        }

        private void tbInfoPedida_Leave(object sender, EventArgs e)
        {
            tbInfoPedida.BackColor = Color.White;
        }
        #endregion

        #region btContinuar_Click(object sender, EventArgs e)-doc
        /// <summary>
        /// Toma de decisiones del Formulario
        /// </summary>
        /// <param name="sender">btContinuar</param>
        /// <param name="e">click</param>
        private void btContinuar_Click(object sender, EventArgs e)
        {
            //1º compruebo que no vacío
            if (comprobarCampos() == true)
            {
                ENUsuario usuarioCriado = new ENUsuario();

                try
                {
                    //Si el usuario2 ha olvidado la clave
                    if (rbOlvidoClave.Checked == true)
                    {
                        //Si proporciona bien el usuario2 y su correoUsuario Alternativo -> le enviamos un correoUsuario-entidadUsuario con la clave
                        if (usuarioCriado.UsuarioSabeSuCorreoAlternativo(tbQuienSoy.Text, tbInfoPedida.Text) == true)
                        {
                            DataTable tablica = new DataTable();
                            tablica = usuarioCriado.refrecaMemoriaMedianteCorreoAlternativo(tbQuienSoy.Text);
                            enviaClaveADireccionAlternativa(tablica);
                        }
                        //Si no nos lo proporciona bien -> Informamos
                        else
                        {
                            MessageBox.Show("Su usuario de eCampus y su dirección alternativa no coinciden.\nInténtenlo de nuevo.", "Autenticación Fallida", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            tbQuienSoy.Text = "";
                            tbInfoPedida.Text = "";
                            tbQuienSoy.Focus();
                        }
                    }

                    if (rbOlvidoNombreUsuario.Checked == true)
                    {
                        ENUsuario criadoSMS = new ENUsuario();
                        if (criadoSMS.SMSAlternativaYTelefono(tbQuienSoy.Text, tbInfoPedida.Text))
                        {
                            DataTable correito = criadoSMS.dimeUsuarioSegunCorreoAlternativo(tbQuienSoy.Text);

                            if (tbInfoPedida.Text[0] == '6')
                            {
                                if ((enviaSMS(tbQuienSoy.Text, tbInfoPedida.Text, correito.Rows[0].ItemArray[0].ToString())) != "")
                                {
                                    MessageBox.Show("Se le ha enviado a su móvil su Usuario. Gracias", "Envío SMS", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                    tbQuienSoy.Text = "";
                                    tbInfoPedida.Text = "";
                                    tbQuienSoy.Focus();
                                }
                            }
                            else
                            {
                                MessageBox.Show("Lamentamos no poder ayudarle, el teléfono del que disponemos no es móvil. Póngase en contacto con nuestro administrador: admin@ua.es", "Teléfono disponible no válido", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                tbQuienSoy.Text = "";
                                tbInfoPedida.Text = "";
                                tbQuienSoy.Focus();
                            }
                        }
                        else
                            {
                                MessageBox.Show("Su correo alternativo de eCampus y teléfono no coinciden.\nInténtenlo de nuevo.", "Autenticación Fallida", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                tbQuienSoy.Text = "";
                                tbInfoPedida.Text = "";
                                tbQuienSoy.Focus();
                            }
                    }
                }
                catch (Exception)
                {
                    MessageBox.Show("Inténtelo de nuevo más tarde. No se ha podido realizar");
                }
            }
        }
        #endregion

        #region enviaClaveADireccionAlternativa(DataTable aQuien)-doc
        /// <summary>
        /// Enviará clave a dirección alternativa
        /// </summary>
        /// <param name="aQuien">usuario</param>
        private void enviaClaveADireccionAlternativa(DataTable aQuien)
        {
            try
            {
                //-------------MONTO CLIENTE-----------------
                //monto Cliente smtp de gmail
                SmtpClient server = new SmtpClient("smtp.gmail.com", 587);
                //monto la autenticación necesaria para enviar desde el servidor de gmail
                //correoUsuario-entidadUsuario de gmail y su contraseña
                server.Credentials = new System.Net.NetworkCredential("grupo12.dpaa@gmail.com", "grupo12.dpaa2012");
                //habilito ssl
                server.EnableSsl = true;

                //------------MONTO CORREO-E------------------
                MailMessage mnsj = new MailMessage();
                mnsj.Subject = "Recordatorio de clave de usuario de eCampus";
                mnsj.To.Add(new MailAddress(aQuien.Rows[0][1].ToString()));
                mnsj.From = new MailAddress("grupo12.dpaa@gmail.com", "Servicio Informática eCampus");
                mnsj.Body = "Recordatorio de contraseña de usuario eCampus: "+aQuien.Rows[0][0].ToString()+"\n"+"Su clave es: "+aQuien.Rows[0][2].ToString()+"\n\n\nGracias por trabajar con eCampus\n"+"Servicio de Informática "+DateTime.Now;
                //------------ENVÍO TEMAZO--------------------
                server.Send(mnsj);
                MessageBox.Show("El Mail, con el recordatorio de tu clave, se ha enviado correctamente a tu correo alternativo", "Envío de Información. eCampus.", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                //------------CIERRO FORMULARIO--------------- 
                this.Dispose();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
        #endregion

        #region enviaSMS(string correoAlt, string movil, string correo)-doc
        /// <summary>
        /// Enviará SMS 
        /// </summary>
        /// <param name="correoAlt">Entrada Correo Alternativo</param>
        /// <param name="movil">Móvil</param>
        /// <param name="correo">Correo del Usuario eCampus</param>
        /// <returns></returns>
        private string enviaSMS(string correoAlt, string movil, string correo)
        {
            WebClient client = new WebClient();
            // No es necesario pero conviene siempre hacer creer que eres Internet explorer 
            client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
            // Ahora se añaden los parámetros de la petición
            client.QueryString.Add("Correo", "e.matas@gmail.com");
            client.QueryString.Add("Passwd", "patis:2012");
            client.QueryString.Add("Remitente", "eCampus");
            client.QueryString.Add("Destinatarios", "34"+movil);
            client.QueryString.Add("Mensaje", "Recordatorio de usuario: "+correo+" Servicio Informatica eCampus (c) 2012");
            client.QueryString.Add("Flash", "0");
            client.QueryString.Add("Report", "1");
            client.QueryString.Add("Descuento", "0");
            // Añadir todos los parámetros que se necesiten en la petición
            //.........  Todos los parámetros necesarios de la API HTTP facilitada en PDF 
            // con client.QueryString.Add("....", "...."); 

            // Se abre la petición y se lee la respuesta
            string baseurl = "http://api.mensatek.com/v4/enviar.php";
            Stream data = client.OpenRead(baseurl);
            StreamReader reader = new StreamReader(data);
            string s = reader.ReadToEnd();
            data.Close();
            reader.Close();
            // Devolvemos el string para ver el resultado
            // También podemos imprimirlo para verlo en pantalla. 
            return (s);
        }
        #endregion

        private void FormNoPuedoAccesoAlSistema_Load(object sender, EventArgs e)
        {

        }
    }
}
